////////////////////////////////////////////////////////////////////////
//
//     Copyright (c) 2009-2013 Denim Group, Ltd.
//
//     The contents of this file are subject to the Mozilla Public License
//     Version 2.0 (the "License"); you may not use this file except in
//     compliance with the License. You may obtain a copy of the License at
//     http://www.mozilla.org/MPL/
//
//     Software distributed under the License is distributed on an "AS IS"
//     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//     License for the specific language governing rights and limitations
//     under the License.
//
//     The Original Code is ThreadFix.
//
//     The Initial Developer of the Original Code is Denim Group, Ltd.
//     Portions created by Denim Group, Ltd. are Copyright (C)
//     Denim Group, Ltd. All Rights Reserved.
//
//     Contributor(s): Denim Group, Ltd.
//
////////////////////////////////////////////////////////////////////////
package com.denimgroup.threadfix.service;

import java.util.List;

import com.denimgroup.threadfix.data.entities.Application;
import com.denimgroup.threadfix.data.entities.Finding;
import com.denimgroup.threadfix.data.entities.SurfaceLocation;
import com.denimgroup.threadfix.data.entities.Vulnerability;

/**
 * @author bbeverly
 * 
 */
public interface VulnerabilityService {

	/**
	 * @param vulnerabilityId
	 * @return
	 */
	Vulnerability loadVulnerability(int vulnerabilityId);

	/**
	 * @param application
	 * @return
	 */
	List<Vulnerability> loadOpenVulnerabilities(Application application);
	
	/**
	 * @param vulnerability
	 * @return
	 */
	List<Vulnerability> loadSimilarVulnerabilities(Vulnerability vulnerability);

	/**
	 * @param vulnerability
	 * @return
	 */
	List<Vulnerability> loadAllByGenericVulnerabilityAndApp(Vulnerability vulnerability);

	/**
	 * @param vulnerability
	 */
	void storeVulnerability(Vulnerability vulnerability);
	
	/**
	 * @param vulnerabilityIdList
	 */
	void markListAsFalsePositive(List<Integer> vulnerabilityIdList);
	
	/**
	 * @param vulnerabilityIdList
	 */
	void markListAsNotFalsePositive(List<Integer> vulnerabilityIdList);

	/**
	 * @param vulnList
	 */
	void simplifyFindings(List<Vulnerability> vulnList);

	/**
	 * @param vulnerabilities
	 * @return
	 */
	public List<Vulnerability> loadVulnerabilityList(List<Integer> vulnerabilities);

	/**
	 * @param vulnerability
	 * @return
	 */
	public String[] getTimeDifferences(Vulnerability vulnerability);

	/**
	 * 
	 * @param vulnerability
	 * @return
	 */
	public SurfaceLocation getSurfaceLocationFromDynamicFinding(Vulnerability vulnerability);

	/**
	 * 
	 * @param vulnerability
	 * @return
	 */
	public List<Finding> getStaticFindings(Vulnerability vulnerability);

	/**
	 * 
	 * @param application
	 * @return
	 */
	List<Vulnerability> getFalsePositiveVulns(Application application);

	/**
	 * 
	 * @param application
	 * @return
	 */
	List<Vulnerability> getNonFalsePositiveVulns(Application application);

	/**
	 * 
	 * @param vulnerabilities
	 * @return
	 */
	String[] getAges(List<Vulnerability> vulnerabilities);

}
